#ifndef TABLESYMBOLES_H_
#define TABLESYMBOLES_H_

#include "SymboleValue.h"
#include <vector>
#include <iostream>
using namespace std;



/*! \file TableSymboles.h
    \brief La spécification de la classe TableSymboles
   
    Décrit la liste des méthodes et attributs associés à la classe TableSymboles
    \author Inconnu
    \date 19.12.2012
 */
/*! \class TableSymboles
    \brief La classe représentant les entiers.
   
    Cette classe permet de construire une table vide de pointeurs sur des symboles valués. Les méthodes suivantes sont associées
    à un objet de type TableSymboles :
   
    \li TableSymboles()
    \li chercheAjoute (Symbole s) : SymboleValue*


   Cette classe dispose d'un attribut : 
   vector<SymboleValue *> table
 */


class TableSymboles {
public:
    
/*! \fn TableSymboles()
    \brief Constructeur de la classe TableSymboles.

    Ce constructeur construit une table vide de pointeurs sur des symboles valués.
*/
    TableSymboles(); 
    
    
/*! \fn SymboleValue * chercheAjoute (Symbole s)
    \brief On verifie que le symbole existe dans la table OU on l'y ajoute.
  
    si le symbole s est identique à un symbole valué déjà présent dans la table,
    on renvoie un pointeur sur ce symbole valué
    Sinon on insère un nouveau symbole valué correspondant à s
    et on renvoie un pointeur sur le nouveau symbole valué inséré
    \return Un pointeur sur le symbole trouvé
*/
    SymboleValue * chercheAjoute (Symbole s);
    
    
/*! \brief Definition de l'operateur <<

    Affiche via la fonction cout la table des symboles.
*/

    friend ostream & operator << (ostream & cout, TableSymboles ts); 
    


private:
    
/*! \var vector<SymboleValue *> table
    \brief  Contient la liste des SymboleValue trouvés dans le programme examiné, trié sur la chaine.
*/
    vector<SymboleValue *> table; 
};

#endif /* TABLESYMBOLES_H_ */
